package com.bestcem.xm.ticket.mq;

///**
// * @author liheng
// * @version v1.0
// * @date 2021/10/27 17:06
// */
//@Slf4j
//@Component
//public class TicketReceiver {
//
//    @Resource
//    private TicketMqConsumUtil ticketMqConsumUtil;
//
//    @Resource
//    private TicketNotificationService ticketNotificationService;


//    /**
//     * 监听 工单二次投放队列MQ
//     */
//    @RabbitListener(queues = "#{ticketDeliverAgainQueue.name}", concurrency = "${app.ticket.rabbitmq.deliverAgainQueue.concurrency:2}")
//    @RabbitHandler
//    public void handlerDeliverAgainApp(Message dto, Channel channel) {
//
//        try {
//            if (log.isInfoEnabled()) {
//                log.info("[Ticket] 工单二次投放队列收到消息:{}", Base64.getEncoder().encodeToString(dto.getBody()));
//            }
//            MsgPackFormatUtil.MqMessage mqMessage = MsgPackFormatUtil.mqDecode(dto.getBody());
//            if (mqMessage == null) {
//                log.error("[Ticket] 工单二次投放队列息解析失败:" + Base64.getEncoder().encodeToString(dto.getBody()));
//                channel.basicNack(dto.getMessageProperties().getDeliveryTag(), false, false);
//                return;
//            }
//            if (log.isInfoEnabled()) {
//                log.info("[Ticket] 工单二次投放队列消息体 {}", JSON.toJSONString(mqMessage));
//            }
//
//            if ("deliver.again.begin".equals(mqMessage.getTopic())) {
//                DeliverAgainDTO deliverAgainDTO = BeanUtil.mapToBean(mqMessage.getData(), DeliverAgainDTO.class, true);
//                ticketMqConsumUtil.deliverAgainBegin(deliverAgainDTO);
//            } else {
//                log.error("[Ticket] 工单预警触发队列消息topic异常，topic：{}", mqMessage.getTopic());
//                try {
//                    channel.basicNack(dto.getMessageProperties().getDeliveryTag(), false, false);
//                } catch (IOException ex) {
//                    log.error("[Ticket]: 工单预警触发队列消息确认失败", ex);
//                }
//            }
//
//            channel.basicAck(dto.getMessageProperties().getDeliveryTag(), false);
//        } catch (Exception e) {
//            String errorMsg = Base64.getEncoder().encodeToString(dto.getBody());
//            log.error("[Ticket] 工单二次投放队列消息处理异常 {}", errorMsg, e);
//            try {
//                channel.basicNack(dto.getMessageProperties().getDeliveryTag(), false, false);
//            } catch (IOException ex) {
//                log.error("[Ticket]: 工单二次投放队列消息确认失败", ex);
//            }
//        }
//    }

//    /**
//     * 监听 工单预警触发队列MQ
//     */
//    @RabbitListener(queues = "#{ticketRuleTriggerQueue.name}", concurrency = "${app.ticket.rabbitmq.alertRuleTriggeredQueue.concurrency:2}")
//    @RabbitHandler
//    public void handlerRuleTriggeredApp(Message dto, Channel channel) {
//
//        try {
//            if (log.isInfoEnabled()) {
//                log.info("[Ticket] 工单二次投放队列收到消息:{}", Base64.getEncoder().encodeToString(dto.getBody()));
//            }
//            MsgPackFormatUtil.MqMessage mqMessage = MsgPackFormatUtil.mqDecode(dto.getBody());
//            if (mqMessage == null) {
//                log.error("[Ticket] 工单预警触发队列息解析失败:" + Base64.getEncoder().encodeToString(dto.getBody()));
//                channel.basicNack(dto.getMessageProperties().getDeliveryTag(), false, false);
//                return;
//            }
//            if (log.isInfoEnabled()) {
//                log.info("[Ticket] 工单预警触发队列消息体 {}", JSON.toJSONString(mqMessage));
//            }
//            if ("alert.rule.triggered".equals(mqMessage.getTopic())) {
//                TicketStatusUpdateDto ticketStatusUpdateDto = BeanUtil.mapToBean(mqMessage.getData(), TicketStatusUpdateDto.class, true);
//                ticketMqConsumUtil.ticketStatusUpdate(ticketStatusUpdateDto);
//            } else {
//                log.error("[Ticket] 工单预警触发队列消息topic异常，topic：{}", mqMessage.getTopic());
//                try {
//                    channel.basicNack(dto.getMessageProperties().getDeliveryTag(), false, false);
//                } catch (IOException ex) {
//                    log.error("[Ticket]: 工单预警触发队列消息确认失败", ex);
//                }
//            }
//
//            channel.basicAck(dto.getMessageProperties().getDeliveryTag(), false);
//        } catch (Exception e) {
//            String errorMsg = Base64.getEncoder().encodeToString(dto.getBody());
//            log.error("[Ticket] 工单预警触发队列消息处理异常 {}", errorMsg, e);
//            try {
//                channel.basicNack(dto.getMessageProperties().getDeliveryTag(), false, false);
//            } catch (IOException ex) {
//                log.error("[Ticket]: 工单预警触发队列消息确认失败", ex);
//            }
//        }
//    }

//    /**
//     * 监听 工单预警触发队列MQ
//     */
//    @RabbitListener(queues = "#{ticketCommonQueue.name}", concurrency = "${app.ticket.rabbitmq.ticketCommonQueue.concurrency:2}")
//    @RabbitHandler
//    public void handlerCommonApp(Message dto, Channel channel) {
//
//        try {
//            if (log.isInfoEnabled()) {
//                log.info("[Ticket] 工单二次投放队列收到消息:{}", Base64.getEncoder().encodeToString(dto.getBody()));
//            }
//            MsgPackFormatUtil.MqMessage mqMessage = MsgPackFormatUtil.mqDecode(dto.getBody());
//            if (mqMessage == null) {
//                log.error("[Ticket] 工单预警触发队列息解析失败:" + Base64.getEncoder().encodeToString(dto.getBody()));
//                channel.basicNack(dto.getMessageProperties().getDeliveryTag(), false, false);
//                return;
//            }
//            if (log.isInfoEnabled()) {
//                log.info("[Ticket] 工单预警触发队列消息体 {}", JSON.toJSONString(mqMessage));
//            }
//            if ("qdes.project_created".equals(mqMessage.getTopic())) {
//                NotificationCreateDto notificationCreateDto = BeanUtil.mapToBean(mqMessage.getData(), NotificationCreateDto.class, true);
//                ticketMqConsumUtil.createNotificationByProject(notificationCreateDto);
//            } else if (AwardMqConstant.TICKET_NOTIFICATION_TRIGGER_TOPIC.equals(mqMessage.getTopic())) {
//                log.info("RabbitAppReceive msg TICKET_NOTIFICATION_TRIGGER_TOPIC");
//                NotificationTriggerDTO notificationTriggerDTO = BeanUtil.mapToBean(mqMessage.getData(), NotificationTriggerDTO.class, true);
//                ticketMqConsumUtil.notificationTrigger(notificationTriggerDTO);
//            } else if ("user.smtp_deleted".equals(mqMessage.getTopic())) {
//                List<String> smtpIdList = MsgPackFormatUtil.mapToList(mqMessage.getData());
//                ticketMqConsumUtil.clearSmtp(smtpIdList);
//            } else if ("user.org_created".equals(mqMessage.getTopic())) {
//                OrgCreatedMessage msg = MsgPackFormatUtil.mapToObj(mqMessage.getData(), OrgCreatedMessage.class);
//                // 创建工单默认详情模板和处理模板
//                ticketMqConsumUtil.createTicketDefaultTemplate(msg);
//            } else if ("wechat.wechat_unsubscribe".equals(mqMessage.getTopic())) {
//                String openId = String.valueOf(mqMessage.getData().get("openid"));
//                ticketNotificationService.removeWechatUserSubscription(openId);
//            } else {
//                log.error("[Ticket] 工单预警触发队列消息topic异常，topic：{}", mqMessage.getTopic());
//                try {
//                    channel.basicNack(dto.getMessageProperties().getDeliveryTag(), false, false);
//                } catch (IOException ex) {
//                    log.error("[Ticket]: 工单预警触发队列消息确认失败", ex);
//                }
//            }
//            channel.basicAck(dto.getMessageProperties().getDeliveryTag(), false);
//        } catch (Exception e) {
//            String errorMsg = Base64.getEncoder().encodeToString(dto.getBody());
//            log.error("[Ticket] 工单预警触发队列消息处理异常 {}", errorMsg, e);
//            try {
//                channel.basicNack(dto.getMessageProperties().getDeliveryTag(), false, false);
//            } catch (IOException ex) {
//                log.error("[Ticket]: 工单预警触发队列消息确认失败", ex);
//            }
//        }
//    }
//}
